package studystat;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

/**
 * Een doelstelling waarbij de gebruiker een bepaald aantal minuten moet gestudeerd hebben
 * @author CWB4
 * @see {@link Conditiestelling}, {@link UrenConditiestelling}
 */
public class UrenGestudeerd extends UrenConditie {
	
	/**
	 * Velden
	 */
	// Het vak dat gestudeerd moet worden, null voor alle vakken
	private Vak vak;
	// Het aantal minuten waaraan een studiepunt gelijk is, namelijk 30 uren, ofwel 1800 studiepunten
	private static final int studiepunt = 1800;

	/**
	 * Maak een nieuwe doelstelling aan
	 * @param naam	De naam van de doelstelling
	 * @param duurConditie	De tijd waarin de doelstelling moet worden uitgevoerd, in minuten
	 * @param duurActi	De tijd die gestudeerd moet zijn, in minuten
	 * @param vak	Het vak dat de gebruiker moet studeren voor de doelstelling
	 */
	public UrenGestudeerd(String naam, int duurConditie, int duurActi, Vak vak) {
		super(naam, duurConditie, duurActi);
		this.vak = vak;
	}

	/**
	 * Maak een nieuwe doelstelling aan
	 * @param naam	De naam van de doelstelling
	 * @param samenvatting	Een samenvatting van de doelstelling
	 * @param duurConditie	De tijd waarin de doelstelling moet worden uitgevoerd, in minuten
	 * @param duurActi	De tijd die gestudeerd moet zijn, in minuten
	 * @param vak	Het vak dat de gebruiker moet studeren voor de doelstelling
	 */
	public UrenGestudeerd(String naam, String samenvatting, int duurConditie,
			int duurActi, Vak vak) {
		super(naam, samenvatting, duurConditie, duurActi);
		this.vak = vak;
	}
	
	/**
	 * Maak een nieuwe doelstelling aan
	 * @param naam	De naam van de doelstelling
	 * @param samenvatting	Een samenvatting van de doelstelling
	 * @param duurConditie	De tijd waarin de doelstelling moet worden uitgevoerd, in minuten
	 * @param duurActiSP	De tijd die gestudeerd moet zijn, in studiepunten (waarbij 1SP staat voor 30 uren)
	 * @param vak	Het vak dat de gebruiker moet studeren voor de doelstelling
	 */
	public UrenGestudeerd(String naam, String samenvatting, Vak vak, int duurConditie,
			int duurActiSP) {
		super(naam, samenvatting, duurConditie, (duurActiSP*studiepunt));
		this.vak = vak;
	}

	/* (non-Javadoc)
	 * @see studystat.UrenConditiestelling#isVoldaan(java.util.List)
	 */
	@Override
	public boolean isVoldaan(List<Activiteit> activiteiten) {
		
		// Haal de relevante activiteiten uit de lijst op basis van de duur
		List<Activiteit> activiteitenBinnenDuur = new ArrayList<Activiteit>();
		Date lastActi = activiteiten.get(activiteiten.size() -1).getStopTijd();
		for(Activiteit acti : activiteiten) {
			Date beginConditie = new Date(lastActi.getTime() - (60000*getDuurConditie())); // De datum van waar de relevante activiteiten ten minste beginnen
			Date beginActi = acti.getStartTijd();
			if(beginActi.after(beginConditie)) {
				activiteitenBinnenDuur.add(acti);
			}
		}
		
		// Haal uit de activiteiten binnen de duur die activiteiten eruit die relavant zijn voor deze doelstelling
		List<Activiteit> relevanteActiviteiten = new ArrayList<Activiteit>();
		for(Activiteit acti : activiteitenBinnenDuur) {
			if(acti instanceof Studie) {
				if(vak == null) {
					relevanteActiviteiten.add(acti);
				}
				else if(vak.equals(((Studie) acti).getVak())) {
					relevanteActiviteiten.add(acti);
				}
			}
		}
		
				
		// Kijk hoe lang de gebruiker is bezig geweest met de activiteit
		long duurBezig = 0;
		for(Activiteit relActi : relevanteActiviteiten) {
			duurBezig += relActi.getDuur();
		}
		
		// Kijk of dit lang genoeg is en return het antwoord
		boolean isVoldaan = false;
		if(duurBezig >= getDuurActi()) {
			isVoldaan = true;
		}
		return isVoldaan;
	}
	

}
